#include <iostream>

#include "menu.h"

///menu.cpp
///class implementation for menu.h

Menu::Menu(std::vector<Document> *p_menu_v_ptr):menu_v_ptr(p_menu_v_ptr)
{
	Menu_options_enum m=INVALID_CHOICE;
	do
	{
		write_main_menu();
		std::cout<<"Valasszon: ";
		m=get_menu_choice();
		do_chosen_menu(m);
	}while(EXIT_AND_SAVE!=m);
	std::cout<<"Mentes es kilepes...."<<std::endl;
}

Menu::~Menu()
{
}

void Menu::write_main_menu() const
{
	std::cout<<std::endl<<
	"Menu:"<<std::endl<<
	"Uj irat:"<<std::endl<<
	"   [ h ]atarozat"<<std::endl<<
	"   Ugyfeltol erkezo level:"<<std::endl<<
	"      [ a ]janlatkeres"<<std::endl<<
	"      [ p ]anaszos level"<<std::endl<<
	"   [ s ]zamla"<<std::endl<<
	"Lekerdezesek:"<<std::endl<<
	"   Pa[ r ]tnerre"<<std::endl<<
	"   [ u ]gyszamra"<<std::endl<<
	"   [ i ]ktatoszamra"<<std::endl<<
	"[ k ]ilepes es mentes"<<std::endl;
}

void Menu::add_document(const Menu_options_enum &p_type)
{
	std::cout<<"Irat hozzadasa: "<<p_type<<std::endl;
	int n;
	std::cin>>n;
	menu_v_ptr->push_back(n);
}

void Menu::query_partner() const
{
	std::cout<<"Kereses partner alapjan:"<<std::endl;
	for(unsigned int i=0;i<menu_v_ptr->size();++i)
	{
		std::cerr<<1+i<<':'<<menu_v_ptr->at(i).get_x()<<std::endl;
	}
}

void Menu::query_issue() const
{
	std::cout<<"Kereses ugyszam alapjan:"<<std::endl;
	for(unsigned int i=0;i<menu_v_ptr->size();++i)
	{
		std::cerr<<1+i<<':'<<menu_v_ptr->at(i).get_x()<<std::endl;
	}
}

void Menu::query_ref_no() const
{
	std::cout<<"Kereses iktatoszam alapjan:"<<std::endl;
	for(unsigned int i=0;i<menu_v_ptr->size();++i)
	{
		std::cerr<<1+i<<':'<<menu_v_ptr->at(i).get_x()<<std::endl;
	}
}

Menu::Menu_options_enum Menu::get_menu_choice() const
{
	bool p_ok=true;
  char p_ch;
	Menu_options_enum p_m=INVALID_CHOICE;
	do
	{
		std::string p_s;
		std::cin>>p_s;
		p_ch=p_s[0];
		//std::cerr<<p_ch;
		switch(p_ch)
		{
			case 'h': //hatarozat
			{
				p_m=ADD_ORDER;
				break;
			}
			case 'a': //ajanlatkeres
			{
				p_m=ADD_TENDER;
				break;
			}
			case 'p': //panaszos level
			{
				p_m=ADD_CLAIM;
				break;
			}
			case 's': //szamla
			{
				p_m=ADD_BILL;
				break;
			}
			case 'r': //kereses partnerre
			{
				p_m=QUERY_PARTNER;
				break;
			}
			case 'u': //kereses ugyszamra
			{
				p_m=QUERY_ISSUE;
				break;
			}
			case 'i': //kereses iktatoszamra
			{
				p_m=QUERY_REF_NO;
				break;
			}
			case 'k': //kilepes es mentes
			{
				p_m=EXIT_AND_SAVE;
				break;
			}
			default:
			{
				break;
			}
		}
		if(INVALID_CHOICE==p_m)
		{
			std::cerr<<"Ervenytelen valasztas."<<std::endl;
			std::cout<<"Valasszon: ";
			p_ok=false;
		}
		else
		{
			p_ok=true;
		}
	}while(!p_ok);
	return(p_m);
}

void Menu::do_chosen_menu(const Menu_options_enum &p_menu)
{
	switch(p_menu)
	{
		case ADD_ORDER:
		{
			add_document(ADD_ORDER);
			break;
		}
		case ADD_TENDER:
		{
			add_document(ADD_TENDER);
			break;
		}
		case ADD_CLAIM:
		{
			add_document(ADD_CLAIM);
			break;
		}
		case ADD_BILL:
		{
			add_document(ADD_BILL);
			break;
		}
		case QUERY_PARTNER:
		{
			query_partner();
			break;
		}
		case QUERY_ISSUE:
		{
			query_issue();
			break;
		}
		case QUERY_REF_NO:
		{
			query_ref_no();
			break;
		}
		case EXIT_AND_SAVE:
		{
			break;
		}
		default:
		{
			throw UNKNOWN_MENU_CHOICE;
			break;
		}
	}
}

/*
void Menu::add(const int &p_e)
{
	Aktazo::v.push_back(1234);
}
*/